home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac 1993 September / clonecd / September 93.img / Archives / Fun, Tricks & Hacks / IQ Test / IQ Test Sorce Code ƒ / DoWarningDialog.c < prev    next >
C/C++ Source or Header  |  1993-02-17  |  3KB  |  131 lines

  1. #include "IQ Test.h"
  2.  
  3.  
  4. /*
  5.     Function prototypes.
  6. */
  7.  
  8. static void            OutlineButton(
  9.                         ControlHandle        button );
  10. static pascal void     StandardDrawDefaultOutline(
  11.                         DialogPtr            theDialog,
  12.                         short                itemNo );
  13.  
  14.  
  15. short DoWarningDialog( void )
  16.     {
  17.     short            itemHit,
  18.                     itemType,
  19.                     status = noErr;
  20.     Boolean            dialogDone = FALSE;
  21.     DialogPtr        theDialog;
  22.     Handle            itemHandle;
  23.     Rect            itemRect,
  24.                     outlineRect;
  25.     
  26.     dialogDone = FALSE;
  27.     theDialog = GetNewDialog( WARNING_DLOG_ID, NIL_PTR, MOVE_TO_FRONT );
  28.     GetDItem( theDialog, WARNING_QUIT_BUTTON, &itemType, &itemHandle,
  29.         &outlineRect );
  30.     InsetRect( &outlineRect, OUTLINE_FRAME_INSET, OUTLINE_FRAME_INSET);
  31.     GetDItem( theDialog, WARNING_OUTLINE_ITEM, &itemType, &itemHandle,
  32.         &itemRect );
  33.     SetDItem( theDialog, WARNING_OUTLINE_ITEM, itemType,
  34.         ( Handle ) StandardDrawDefaultOutline, &outlineRect );
  35.  
  36.     CenterAsAlert( theDialog );
  37.     ShowWindow( theDialog );
  38.     SetCursor( &arrow );
  39.     while( dialogDone == FALSE )
  40.         {
  41.         ModalDialog( NIL_PTR, &itemHit );
  42.         switch( itemHit )
  43.             {
  44.             case WARNING_QUIT_BUTTON:
  45.                 dialogDone = TRUE;
  46.                 status = QUIT_STATUS;
  47.                 break;
  48.             default:
  49.                 dialogDone = TRUE;
  50.                 status = noErr;
  51.                 break;
  52.             }
  53.         }                
  54.     DisposeDialog( theDialog );
  55.  
  56.     return ( status );
  57.     }
  58.  
  59.  
  60. #define BUTTON_FRAME_SIZE     3
  61. #define BUTTON_OVAL            16
  62.  
  63. void OutlineButton(
  64.     ControlHandle        button )
  65.     {
  66.     Rect                theRect;
  67.     PenState            curPen;
  68.  
  69.     /*
  70.         This code was modified from Pascal code provided by:
  71.             Keith Rollin
  72.             Apple Computer, Inc.
  73.             Developer Technical Support
  74.         
  75.         For the outline to be drawn correctly on updateEvts, the Rect of the
  76.         userItem must be set to the size of the Rect used to draw the
  77.         outline.  This must be done before the dialog is drawn for the first
  78.         time.  (A draw command is issued by the Dialog Manager only if the
  79.         update region of the window overlaps the Rect of the userItem.)
  80.         
  81.         Use the following code to accomplish this:
  82.         
  83.             #define OUTLINE_FRAME_INSET        -4
  84.             
  85.             short        itemType;
  86.             DialogPtrt    theDialog;
  87.             Handle        itemHandle;
  88.             Rect        itemRect,
  89.                         outlineRect;
  90.             
  91.             theDialog = GetNewDialog( DIALOG_ID, NIL_PTR, MOVE_TO_FRONT );
  92.             GetDItem( theDialog, DEFAULT_BUTTON, &itemType, &itemHandle,
  93.                 &outlineRect );
  94.             InsetRect( &outlineRect, OUTLINE_FRAME_INSET, OUTLINE_FRAME_INSET );
  95.             GetDItem( theDialog, OUTLINE_USERITEM, &itemType, &itemHandle,
  96.                 &itemRect );
  97.             SetDItem( theDialog, OUTLINE_USERITEM, &itemType, 
  98.                 ( Handle ) StandardDrawDefaultOutline, &outlineRect );
  99.     */
  100.  
  101.     if ( button != NIL_PTR )
  102.         {
  103.         GetPenState( &curPen );
  104.         PenNormal();
  105.         theRect = ( **button ).contrlRect;
  106.         InsetRect( &theRect, OUTLINE_FRAME_INSET, OUTLINE_FRAME_INSET );
  107.         if ( ( **button ).contrlHilite == INACTIVE )
  108.             PenPat( gray );
  109.         else
  110.             PenPat( black );
  111.         PenSize( BUTTON_FRAME_SIZE, BUTTON_FRAME_SIZE );
  112.         FrameRoundRect( &theRect, BUTTON_OVAL, BUTTON_OVAL );
  113.         SetPenState( &curPen );
  114.         }
  115.     }
  116.  
  117.  
  118. pascal void StandardDrawDefaultOutline(
  119.     DialogPtr        theDialog,
  120.     short            itemNo )
  121.     {
  122.     short        itemType;
  123.     Handle        itemHandle;
  124.     Rect        itemRect;
  125.  
  126.     GetDItem( theDialog, ok, &itemType, &itemHandle, &itemRect );
  127.     OutlineButton( ( ControlHandle ) itemHandle );
  128.     }
  129.  
  130.  
  131.